package Thread.Synchronized;
/*
* 买票案例出现了线程安全问题
*   使用同步代码块实现线程安全问题
* */
public class RunnableImpl implements Runnable{
//    定义一个多个线程共享的票源
    private int ticket = 100;

//    创建一个锁对象
    Object obj = new Object();

//    设置线程任务：买票
    @Override
    public void run() {
//        先判断票是否存在
        while(true){
//            同步代码块
            synchronized (obj){
                if(ticket > 0) {
//            提高程序问题出现的概率，让其睡眠
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName() + "-->正在买第" + ticket + "张票");
                    ticket--;
                }
            }
        }
    }
}
